import { RouteItem } from '@/api/model/permissionModel';

const checkRoute = (routes: RouteItem[]): RouteItem[] => {
  // path 是当前路由的路径，会与配置中的父级节点的 path 组成该页面路由的最终路径；如果需要跳转外部链接，可以将path设置为 http 协议开头的路径。
  // name 影响多标签 Tab 页的 keep-alive 的能力，如果要确保页面有 keep-alive 的能力，请保证该路由的name与对应页面（SFC)的name保持一致。
  // component 渲染该路由时使用的页面组件
  // redirect 重定向的路径
  // meta 主要用途是路由在菜单上展示的效果的配置
  // meta.title 该路由在菜单上展示的标题
  // meta.icon 该路由在菜单上展示的图标
  // meta.expanded 决定该路由在菜单上是否默认展开
  // meta.orderNo 该路由在菜单上展示先后顺序，数字越小越靠前，默认为零
  // meta.hidden 决定该路由是否在菜单上进行展示
  // meta.hiddenBreadcrumb 如果启用了面包屑，决定该路由是否在面包屑上进行展示
  // meta.single 如果是多级菜单且只存在一个节点，想在菜单上只展示一级节点，可以使用该配置。请注意该配置需配置在父节点
  // meta.frameSrc 内嵌 iframe 的地址
  // meta.frameBlank 内嵌 iframe 的地址是否以新窗口打开
  // meta.keepAlive 可决定路由是否开启keep-alive，默认开启。
  // children 子菜单的配置
  return routes.map((route) => {
    const copyRoute: Record<string, any> = { ...route };
    return {
      path: copyRoute.path.startsWith('http://') || copyRoute.path.startsWith('https://') ? '' : copyRoute.path,
      name: copyRoute.componentName,
      component: copyRoute.component || 'LAYOUT',
      meta: {
        title: copyRoute.name,
        icon: copyRoute.icon,
        orderNo: copyRoute.sort,
        hidden: !copyRoute.visible,
        frameSrc: copyRoute.frameSrc,
        frameBlank: copyRoute.frameBlank,
        keepAlive: copyRoute.keepAlive,
      },
      children: copyRoute.children && checkRoute(copyRoute.children),
    };
  });
};

export default checkRoute;
